import getData


def getDayOf(year, month, day):
    # 天干名称
    TianGan = ["甲", "乙", "丙", "丁", "戊", "己", "庚", "辛", "壬", "癸"]

    # 地支名称
    DiZhi = ["子", "丑", "寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌", "亥"]

    # 属相名称
    ShuXiang = ["鼠", "牛", "虎", "兔", "龙", "蛇", "马", "羊", "猴", "鸡", "狗", "猪"]

    # 农历日期名
    DayName = ["*", "初一", "初二", "初三", "初四", "初五", "初六", "初七", "初八", "初九", "初十", "十一", "十二", "十三", "十四", "十五", "十六",
               "十七", "十八", "十九", "二十", "廿一", "廿二", "廿三", "廿四", "廿五", "廿六", "廿七", "廿八", "廿九", "三十"]

    # 农历月份名
    MonName = ["*", "正", "二", "三", "四", "五", "六", "七", "八", "九", "十", "十一", "腊"]

    # 公历每月前面的天数
    MonthAdd = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334]

    # 农历数据
    NongliData = [2635, 333387, 1701, 1748, 267701, 694, 2391, 133423, 1175, 396438,
                  3402, 3749, 331177, 1453, 694, 201326, 2350, 465197, 3221, 3402,
                  400202, 2901, 1386, 267611, 605, 2349, 137515, 2709, 464533, 1738,
                  2901, 330421, 1242, 2651, 199255, 1323, 529706, 3733, 1706, 398762,
                  2741, 1206, 267438, 2647, 1318, 204070, 3477, 461653, 1386, 2413,
                  330077, 1197, 2637, 268877, 3365, 531109, 2900, 2922, 398042, 2395,
                  1179, 267415, 2635, 661067, 1701, 1748, 398772, 2742, 2391, 330031,
                  1175, 1611, 200010, 3749, 527717, 1452, 2742, 332397, 2350, 3222,
                  268949, 3402, 3493, 133973, 1386, 464219, 605, 2349, 334123, 2709,
                  2890, 267946, 2773, 592565, 1210, 2651, 395863, 1323, 2707, 265877]
    NongliData = [2635, 333387, 1701, 1748, 267701, 694, 2391, 133423, 1175, 396438,
                  3402, 3749, 331177, 1453, 694, 201326, 2350, 465197, 3221, 3402,
                  400202, 2901, 1386, 267611, 605, 2349, 137515, 2709, 464533, 1738,
                  2901, 330421, 1242, 2651, 199255, 1323, 529706, 3733, 1706, 398762,
                  2741, 1206, 267438, 2647, 1318, 204070, 3477, 461653, 1386, 2413,
                  330077, 1197, 2637, 268877, 3365, 531109, 2900, 2922, 398042, 2395,
                  1179, 267415, 2635, 661067, 1701, 1748, 398772, 2742, 2391, 330031,
                  1175, 1611, 200010, 3749, 527717, 1452, 2742, 332397, 2350, 3222,
                  268949, 3402, 3493, 133973, 1386, 464219, 605, 2349, 334123, 2709,
                  2890, 267946, 2773, 592565, 1210, 2651, 395863, 1323, 2707, 265877,
                  1706, 2773, 133557, 1206, 398510, 2638, 3366, 335142, 3411]

    # 取当前公历年、月、日
    CurYear = year
    CurMonth = month
    CurDay = day
    r = ""

    # 计算到初始时间1921年2月8日的天数：1921 - 2 - 8(正月初一)
    TheDate = (CurYear - 1921) * 365 + (CurYear - 1921) // 4 + CurDay + MonthAdd[CurMonth - 1] - 38
    if (not (CurYear % 4)) and (CurMonth > 2):
        TheDate = TheDate + 1

    # 计算农历天干、地支、月、日
    IsEnd = 0
    m = 0
    n, k = 0, 0
    while IsEnd != 1:
        if NongliData[m] < 4095:
            k = 11
        else:
            k = 12
        n = k
        while n >= 0:
            # 获取wNongliData(m)的第n个二进制位的值
            nBit = NongliData[m]
            for i in range(1, n + 1):
                nBit = nBit // 2
            nBit = nBit % 2
            if TheDate <= (29 + nBit):
                IsEnd = 1
                break
            TheDate = TheDate - 29 - nBit
            n = n - 1
        if IsEnd:
            break
        m = m + 1
    CurYear = 1921 + m
    CurMonth = k - n + 1
    CurDay = TheDate
    if k == 12:
        if CurMonth == NongliData[m] // 65536 + 1:
            CurMonth = 1 - CurMonth
        elif CurMonth > NongliData[m] // 65536 + 1:
            CurMonth = CurMonth - 1

    # 生成农历天干、地支、属相
    r = r + ShuXiang[(CurYear - 4) % 60 % 12]
    r = r + TianGan[((CurYear - 4) % 60) % 10] + DiZhi[((CurYear - 4) % 60) % 12] + "年"

    # 生成农历月、日
    if CurMonth < 1:
        r = r + "闰" + MonName[-1 * CurMonth]
    else:
        r = r + MonName[CurMonth]

    r = r + "月"
    r = r + DayName[CurDay]
    print(r)


if __name__ == '__main__':
    # getData.test_getData()
    getDayOf(2029, 12, 23)
